"""
Python对象的自省机制

自省定义：
    通过一定的机制查询到对象的内部结构。
"""


class Person:
    """
    人
    """
    name = "user"


class Student(Person):
    def __init__(self, school_name):
        self.school_name = school_name


if __name__ == '__main__':
    user = Student("混沌大学")

    # 通过__dict__查询属性
    print(user.__dict__)
    # name虽然不在user.__dict__中，但是可以通过实例直接访问
    print(user.name)
    print(Person.__dict__)
    # 输出结果：
    """
    {'school_name': '混沌大学'}
    user
    {'__weakref__': <attribute '__weakref__' of 'Person' objects>, '__dict__': <attribute '__dict__' of 'Person' objects>,
     '__module__': '__main__', '__doc__': '\n    人\n    ', 'name': 'user'}
    """

    # 添加user的属性
    user.__dict__["school_addr"] = "杭州"
    print(user.school_addr)
    # 输出结果：
    """
    杭州
    """

    # 使用dir列出对象的属性（dir更强大）
    print(dir(user))
    # 输出结果：
    """
    ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', 
    '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__ne__', 
    '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 
    '__weakref__', 'name', 'school_addr', 'school_name']

    """
